package part14;

import java.util.Arrays;
import java.util.List;

/**
 * @author wcj
 * @Date 2021/5/25 17:11
 * @Version 1.0
 */
public class Part141 {

    /**
     * RTTI:即Runtime Type information运行时类型信息
     * Java中基础的运行时类型的使用就是我们的多态，多个具体类型通过向上转型成为一个基类从而调用一个通用方法
     * 通过动态绑定获取对象的具体类型即运行时类型，从而实现方法的正确调用
     * @param args
     */
    public static void main(String[] args) {
        List<Shape> shapes = Arrays.asList(new Circle(), new Square(), new Triangle());
        for (Shape shape : shapes) {
            shape.draw();
        }
    }
}

abstract class Shape {
    void draw() {
        System.out.println(this + ".draw()");
    }

    /**
     * toString
     *
     * @return
     */
    @Override
    abstract public String toString();
}

class Circle extends Shape {

    @Override
    public String toString() {
        return "Circle";
    }
}

class Square extends Shape {

    @Override
    public String toString() {
        return "Square";
    }
}

class Triangle extends Shape {

    @Override
    public String toString() {
        return "Triangle";
    }
}
